from django.db import models

# Create your models here.

# 用户
class User(models.Model):
    # 定义choices参数
    gender = (
        ('male', '男'),
        ('female', '女'),
        ('保密', "保密")
    )

    # CharField 最常用的类型，字符串类型
    # EmailField 邮箱类型，默认max_length最大长度254位
    # DateField 日期类型
    # BooleanField 布尔值类型
    name = models.CharField(max_length=128, unique=True)    # 这里的用户名指的是网络上注册的用户名，不要等同于现实中的真实姓名，所以采用了唯一机制。unique=True 数据不可重复。
    # 最终可以在后台看到密码长度根据你哈希算法的不同，已经变得很长了，所以前面model中设置password字段时，不要想当然的将max_length设置为16这么小的数字
    password = models.CharField(max_length=256)
    email = models.EmailField(unique=True)
    sex = models.CharField(max_length=32, choices=gender, default='男')
    c_time = models.DateField(auto_now_add=True)
    has_confirmed = models.BooleanField(default=False)


    # 使用__str__方法帮助人性化显示对象信息；
    def __str__(self):
        return self.name

    # 模型的元数据
    class Meta:
        ordering = ['-c_time']  # 表示按'c_time'字段进行降序排列
        verbose_name = '用户'
        verbose_name_plural = '用户'

# 确认码
class ConfirmString(models.Model):
    code = models.CharField(max_length=256)
    user = models.OneToOneField('User', on_delete=models.CASCADE)   #一对一关系类型
    c_time = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.user.name + self.code

    class Meta:
        ordering = ['-c_time']
        verbose_name = '确认码'
        verbose_name_plural = '确认码'


# User模型新增了has_confirmed字段，这是个布尔值，默认为False，也就是未进行邮件注册；
# ConfirmString模型保存了用户和注册码之间的关系，一对一的形式；
# code字段是哈希后的注册码；
# user是关联的一对一用户；
# c_time是注册的提交时间。